import request from "@/utils/request";

const PRODUCTSINGLE_BASE_URL = "/api/v1/productsingle";

const ProductsingleAPI = {
  /** 获取单品跟进分页数据 */
  getPage(queryParams?: ProductsinglePageQuery) {
    return request<any, PageResult<ProductsinglePageVO[]>>({
      url: `${PRODUCTSINGLE_BASE_URL}/page`,
      method: "get",
      params: queryParams,
    });
  },
  /**
   * 获取单品跟进表单数据
   *
   * @param id 单品跟进ID
   * @returns 单品跟进表单数据
   */
  getFormData(id: number) {
    return request<any, ProductsingleForm>({
      url: `${PRODUCTSINGLE_BASE_URL}/${id}/form`,
      method: "get",
    });
  },

  /**
   *  添加单品跟进
   *
   *  @param data 单品跟进表单数据
   */
  add(data: ProductsingleForm) {
    return request({
      url: `${PRODUCTSINGLE_BASE_URL}`,
      method: "post",
      data: data,
    });
  },

  /**
   * 更新单品跟进
   *
   * @param id 单品跟进ID
   * @param data 单品跟进表单数据
   */
  update(id: number, data: ProductsingleForm) {
    return request({
      url: `${PRODUCTSINGLE_BASE_URL}/${id}`,
      method: "put",
      data: data,
    });
  },

  /**
   * 批量删除单品跟进，多个以英文逗号(,)分割
   *
   * @param ids 单品跟进ID字符串，多个以英文逗号(,)分割
   */
  deleteByIds(ids: string) {
    return request({
      url: `${PRODUCTSINGLE_BASE_URL}/${ids}`,
      method: "delete",
    });
  },

  /**
   * 导出单品跟进Excel
   *
   * @param queryParams 查询参数
   * @returns Blob数据
   */
  exportExcel(queryParams?: ProductsinglePageQuery) {
    return request({
      url: `${PRODUCTSINGLE_BASE_URL}/export`,
      method: "get",
      params: { ...queryParams, pageSize: -1 },
      responseType: "blob"
    });
  },

  /**
   * 导入单品跟进数据
   *
   * @param file Excel文件
   * @returns 导入结果
   */
  importExcel(file: File) {
    const formData = new FormData();
    formData.append("file", file);
    
    return request<any, ExcelResult>({
      url: `${PRODUCTSINGLE_BASE_URL}/import`,
      method: "post",
      data: formData,
      headers: {
        "Content-Type": "multipart/form-data"
      },
      timeout: 30000
    });
  },

  /**
   * 下载导入模板
   *
   * @returns Blob数据
   */
  downloadTemplate() {
    return request({
      url: `${PRODUCTSINGLE_BASE_URL}/template`,
      method: "get",
      responseType: "blob"
    });
  }
}

export default ProductsingleAPI;

/** 单品跟进分页查询参数 */
export interface ProductsinglePageQuery extends PageQuery {
  /** 主键 */
  id?: number;
  /** 时间 */
  time?: [string, string];
  /** SKU */
  sku?: string;
  /** 品牌 */
  brand?: string;
  /** 三级类别 */
  categoryLevel3?: string;
  /** 店铺简称 */
  shopShortName?: string;
}

/** 单品跟进表单对象 */
export interface ProductsingleForm {
  /** 主键 */
  id?:  number;
  /** 时间 */
  time?:  Date;
  /** 商品名称 */
  productName?:  string;
  /** SKU */
  sku?:  string;
  /** 品牌 */
  brand?:  string;
  /** 一级类别 */
  categoryLevel1?:  string;
  /** 二级类别 */
  categoryLevel2?:  string;
  /** 三级类别 */
  categoryLevel3?:  string;
  /** 店铺简称 */
  shopShortName?:  string;
  /** 经营模式 */
  operationMode?:  string;
  /** 浏览量 */
  pageViews?:  number;
  /** 访客数 */
  visitorCount?:  number;
  /** 人均浏览量 */
  avgPageViewsPerVisitor?:  number;
  /** 平均停留时长 */
  avgStayTime?:  number;
  /** 成交人数 */
  transactionUserCount?:  number;
  /** 成交转化率 */
  conversionRate?:  number;
  /** 成交金额 */
  transactionAmount?:  number;
  /** 创建时间 */
  createTime?:  Date;
  /** 更新时间 */
  updateTime?:  Date;
  /** 删除标记(0:正常 1:删除) */
  isDeleted?:  number;
}

/** 单品跟进分页对象 */
export interface ProductsinglePageVO {
  /** 主键 */
  id?: number;
  /** 时间 */
  time?: Date;
  /** 商品名称 */
  productName?: string;
  /** SKU */
  sku?: string;
  /** 品牌 */
  brand?: string;
  /** 一级类别 */
  categoryLevel1?: string;
  /** 二级类别 */
  categoryLevel2?: string;
  /** 三级类别 */
  categoryLevel3?: string;
  /** 店铺简称 */
  shopShortName?: string;
  /** 经营模式 */
  operationMode?: string;
  /** 浏览量 */
  pageViews?: number;
  /** 访客数 */
  visitorCount?: number;
  /** 人均浏览量 */
  avgPageViewsPerVisitor?: number;
  /** 平均停留时长 */
  avgStayTime?: number;
  /** 成交人数 */
  transactionUserCount?: number;
  /** 成交转化率 */
  conversionRate?: number;
  /** 成交金额 */
  transactionAmount?: number;
  /** 创建时间 */
  createTime?: Date;
  /** 更新时间 */
  updateTime?: Date;
  /** 删除标记(0:正常 1:删除) */
  isDeleted?: number;
}
